The present invention relates generally to a virtual memory subsystem and more specifically to the representation of a noise texture function that occupies a small physical memory footprint in a larger virtual memory space.
In the field of computer graphics, achieving realism is a challenge. Sophisticated rendering techniques including procedural (or algorithmic) shading have been developed in an effort to make rendered objects appear more realistic. Such techniques often include the introduction of “noise” into rendered surfaces to create small, random-seeming variations in colors, surface normals, or the like, that make rendered objects appear more natural.
In procedural graphics, noise is introduced by using a noise function, which is typically a continuous pseudo-random function whose behavior has no discernible pattern but which, for a given set of inputs, returns the same value. The function may be defined in one or more dimensions, but most commonly, the function is defined in three or four dimensions, matching the dimensionality of coordinate systems used in 3-D rendering. The noise function provides the basis for procedures that produce impressive visual effects and graphical objects by adding irregular variations to objects representing such things as clouds, water, fire, stone, terrain, etc. Noise can also be used to alter animations, line drawings, music, and the like, where small variations from a perfectly smooth value create a more natural look or sound.
Procedural noise generation is slow and consumes substantial computational resources. Real time rendering applications, such as video games, are unable to generate noise functions on the fly. Instead, a noise texture is generated in advance from a noise function, and the noise texture is mapped onto objects in an image in real time using standard texture techniques. The noise texture is generally a pattern that occupies a small memory area. The pattern is repeated (wrapped) at boundaries when the texture is applied to a larger area. The repeating character of the pattern, however, may create visual artifacts in the rendered image, detracting from the desired realism. One possible solution is to create a larger noise texture so that wrapping can be avoided. In practice, however, a sufficiently large noise texture exceeds the physical memory resources available in most computer systems. It would therefore be desirable to provide a noise texture that avoided visible repetition without straining system resources.